package com.nujuil;

import javax.swing.*;
import java.awt.*;

public class MyJPanel extends JPanel implements Runnable{
    int[] x = new int[300];     //表示横轴
    int[] y = new int[300];     //表示纵轴

    public MyJPanel(){
        for (int i = 0; i < 300; i++) {
            x[i] = (int)(Math.random()*1024);
            y[i] = (int)(Math.random()*768);
        }
    }

    /**
     * 绘制图形：paint()方法表示来完成图形的绘制
     * Graphics:表示画笔，就是使用Graphics可以去绘制想要的图案
     */
    public void paint(Graphics g){
        //通过画笔来绘制图形的样式

        super.paint(g);
        //设置画布的颜色（充实窗口的颜色）
        this.setBackground(Color.BLACK);

        //先将画笔设置成白色的颜色
        g.setColor(Color.WHITE);
        //设置文本的样式：字体、风格、字号
        g.setFont(new Font("",0,14));

        //绘制一个月亮
        g.fillOval(100,100,80,80);//绘制椭圆，圆
        //绘制一个love文字，告诉画笔即可
        /*g.drawString("love",100,100);*/
        for (int i = 0; i < 300; i++) {
            //g.drawString("love",(int)(Math.random()*1024),(int)(Math.random()*768));
            g.drawString("love",x[i],y[i]);
        }

    }

    /**
     * run()解析：
     * 1、作用是表示线程要执行的任务处理方法，交给线程处理的业务逻辑放在此方法中进行声明即可
     * 2、更改300个love 的坐标
     * 3、线程的run()由JVM调用
     */
    @Override
    public void run() {

        //源源不断的下落
        while (true){
            for (int i = 0; i < 300; i++) {
                y[i]++;
                if(y[i]>768){
                    //下落到底部后重新开始下落
                    y[i]=0;
                }
            }

            //做一个线程任务模拟的耗时操作
            try {
                Thread.sleep(30);//表示线程执行到这里会停顿200毫秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //刷新窗口
            repaint();
        }

    }
}
